package Facade;

import HereClass.BancoDeDados;
import HereClass.Convite;
import HereClass.Salvavel;
import HereClass.Usuario;

public class FachadaDeArmazenamento {

	private BancoDeDados bancoDeDados;
	private static final String USUARIOS = "usuarios_dados";
	private static final String CONVITES = "convites_pendentes";
	private static FachadaDeArmazenamento instanciaUnica = null;
	
		
	protected FachadaDeArmazenamento() {
		this.bancoDeDados = BancoDeDados.getInstance();
	}
	
	public static FachadaDeArmazenamento getInstance(){
		if (instanciaUnica == null)
			instanciaUnica = new FachadaDeArmazenamento();
		return instanciaUnica;
	}
	
	public boolean guardaUsuario(Salvavel salva) {
		return bancoDeDados.create(salva, USUARIOS);
	}
	
	public void atualizaBancoDeDados(Salvavel salva) {
		bancoDeDados.update(salva, USUARIOS);
	}
	
	public void deletaUsuario(Salvavel salva) {
		bancoDeDados.delete(salva, USUARIOS);
	}

	public boolean deletaConvite(Salvavel salva) {
		return bancoDeDados.delete(salva, CONVITES);
	}
		
	public Usuario pesquisaUsuario(String atributo, int indice) {
		return (Usuario)bancoDeDados.retrieve(atributo, USUARIOS, indice);
	}
	
	public Convite pesquisaConvite(String atributo, int indice) {
		return (Convite)bancoDeDados.retrieve(atributo, CONVITES, indice);
	}
	
	public void zerarSistema() {
		this.bancoDeDados.deletarArquivo(USUARIOS + ".dat");
		this.bancoDeDados.deletarArquivo(CONVITES + ".xml");
		this.bancoDeDados.deletarArquivo(USUARIOS + ".xml");
	}

	public boolean adicionaConvitePendente(Convite convite) {
		return bancoDeDados.create(convite, CONVITES);
	}

}
